﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BAL;
using DAL.Entities;
using System.Configuration;

namespace GrouponDesktop.ArmarCupon
{
    public partial class Form1 : Form
    {
        private List<CiudadEntity> listado = new List<CiudadEntity>();
        private DateTime _fechaActual;
        public int IntIdUsuario { set; get; }
        public Form1(int user)
        {
            InitializeComponent();

            this._fechaActual = DateTime.Parse(ConfigurationSettings.AppSettings["actualDate"].ToString());
            
            dateFechaConsumo.Value = this._fechaActual;
            dateFechaOferta.Value = this._fechaActual;
            
            IntIdUsuario = user;
            //Obtenemos las ciudades
            CiudadBAL proxy = new CiudadBAL();
            listado = proxy.GetCiudades();

            List<CiudadEntity> listCiu = new List<CiudadEntity>();


            this.SuspendLayout();

            int topPosition = 0;
            //Agregamos todos los checkbox
            foreach (CiudadEntity item in listado)
            {
                CheckBox checkBox = new CheckBox();

                checkBox.Top = topPosition;
                checkBox.Left = 10;
                checkBox.Text = item.IntIdCiudad + " " + item.VarNombre;
                checkBox.Width = 200;

                topPosition += 25;
                this.panel1.Controls.Add(checkBox);
            }


            this.ResumeLayout();

        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidateForm())
                {
                    //Seteamos el usuario
                    UsuarioEntity user = new UsuarioEntity();
                    user.IntIdUsuario = IntIdUsuario;

                    //Seteamos los datos del cupon
                    CuponEntity cupon = new CuponEntity();
                    cupon.CantMaximaPorCliente = int.Parse(txtCantPorUsuario.Text);
                    cupon.DetalleCupon = new DetalleCuponEntity();
                    cupon.DetalleCupon.Descripcion = txtDescripcion.Text;
                    cupon.DetalleCupon.Precio = float.Parse(txtPrecioReal.Text);
                    cupon.DetalleCupon.PrecioFicticio = float.Parse(txtPrecioFicticio.Text);
                    cupon.FechaPublic = this._fechaActual;
                    cupon.VencimientoFecha = dateFechaOferta.Value.Date;
                    cupon.VencConsumoFecha = dateFechaConsumo.Value.Date;
                    cupon.Stock = int.Parse(txtCantidad.Text);

                    //Agregamos el cupon
                    CuponBAL proxy = new CuponBAL();
                    cupon = proxy.AddCupon(cupon, user);

                    //Cargamos las ciudades

                    foreach (CheckBox item in panel1.Controls)
                    {
                        if (item.Checked == true)
                        {
                            CiudadEntity ciu = new CiudadEntity();
                            string[] parts = item.Text.Split(' ');
                            ciu.IntIdCiudad = Int32.Parse(parts[0]);
                            proxy.AddCiudadToCupon(ciu, cupon);
                        }
                    }

                    MessageBox.Show("Cupon creado con exito!");
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error: " + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }


        public bool ValidateForm()
        {
            bool res = true;
            string errores = string.Empty;

            //Validamos las fechas
            string _fechaActual = ConfigurationSettings.AppSettings["actualDate"].ToString();
            DateTime hoy = DateTime.Parse(_fechaActual);
            if (hoy < dateFechaOferta.Value)
            {
                if (dateFechaOferta.Value > dateFechaConsumo.Value)
                {
                    errores += "La fecha de consumo debe ser posterior a la de oferta\n";
                    res = false;
                }
            }
            else {
                errores += "La fecha de oferta debe ser posterior al dia de hoy\n";
                res = false;
            }

            if (txtDescripcion.Text == string.Empty)
            {
                errores += "Debe cargar una descripcion\n";
                res = false;
            }
            
            if (txtCantidad.Text == string.Empty)
            {
                errores += "La cantidad disponible es obligatoria\n";
                res = false;
            }
            else
            {
                try
                {
                    int algo = Int32.Parse(txtCantidad.Text);
                }
                catch (FormatException ex)
                {
                    errores += "La cantidad disponible no tiene un formato valida\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "La cantidad disponible es muy grande\n";
                    res = false;
                }

            }


            if (txtCantPorUsuario.Text == string.Empty)
            {
                errores += "La cantidad por usuario es obligatoria\n";
                res = false;
            }
            else
            {
                
                try
                {
                    int cantXUser = Int32.Parse(txtCantPorUsuario.Text);
                    int cantTotal = Int32.Parse(txtCantidad.Text);
                    if(cantXUser > cantTotal){
                        errores += "La cantidad por usuario no puede ser mayor que la cantidad total de cupones\n";
                        res = false;
                    }
                }
                catch (FormatException ex)
                {
                    errores += "La cantidad por usuario no tiene un formato valida\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "La cantidad por usuario es muy grande\n";
                    res = false;
                }
                
            }


            if (txtPrecioReal.Text == string.Empty)
            {
                errores += "El precio real es obligatorio\n";
                res = false;
            }
            else
            {
                try
                {
                    float algo = float.Parse(txtPrecioReal.Text);
                }
                catch (FormatException ex)
                {
                    errores += "El precio real no tiene un formato valido\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "El precio real es muy grande\n";
                    res = false;
                }

            }



            if (txtPrecioFicticio.Text == string.Empty)
            {
                errores += "El precio ficticio es obligatorio\n";
                res = false;
            }
            else
            {
                try
                {
                    float algo = float.Parse(txtPrecioFicticio.Text);
                }
                catch (FormatException ex)
                {
                    errores += "El precio ficticio no tiene un formato valido\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "El precio ficticio es muy grande\n";
                    res = false;
                }

            }
            int tantos = 0;
            //Contamos la cant de ciudades elegidas
            foreach (CheckBox item in panel1.Controls)
            {
                if (item.Checked == true)
                {
                    tantos++;
                }
            }
            if(tantos == 0){
                errores += "Debe elegir al menos una ciudad\n";
                res = false;
            }
            if (errores != string.Empty)
            {
                MessageBox.Show(errores, "Hubo Errores");
            }
            return res;
        }
    }
}
